package tips.p_1000.p601_650;

/**
 * 集合 s 包含从 1 到 n 的整数。不幸的是，因为数据错误，
 * 导致集合里面某一个数字复制了成了集合里面的另外一个数字的值，
 * 导致集合 丢失了一个数字 并且 有一个数字重复 。
 * 给定一个数组 nums 代表了集合 S 发生错误后的结果。
 * 请你找出重复出现的整数，再找到丢失的整数，将它们以数组的形式返回。
 * <p>示例 1：
 * 输入：nums = [1,2,2,4]
 * 输出：[2,3]
 * <p>示例 2：
 * 输入：nums = [1,1]
 * 输出：[1,2]
 * <p>提示：
 * 2 <= nums.length <= 10^4
 * 1 <= nums[i] <= 10^4
 *
 * @author hc
 */
public class Demo645 {

    public int[] findErrorNums(int[] nums) {
        int n = nums.length;
        int[] freq = new int[n + 1];
        int[] res = new int[2];
        for (int num : nums) {
            ++freq[num];
        }
        for (int i = n; i > 0; --i) {
            if (freq[i] > 1) {
                res[0] = i;
            }
            if (freq[i] == 0) {
                res[1] = i;
            }
        }
        return res;
    }

    public static void main(String[] args) {
        new Demo645().findErrorNums(new int[]{1, 2, 2, 4});
    }
}
